package jsp;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @author 石小俊
 * @date 2023年10月23日 16:49
 */
@WebServlet("/app")
public class ApplicationServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 在Java中获取Application有两种方式
        // 方式一:适用于Servlet中
        // 在GenericServlet中提供了获取ServletContext的方式
        // 在Servlet中可以直接调用对应方法获取即可
        ServletContext application = super.getServletContext();
        // 方式二:通用型,可以根据request或者session进行获取
        // 根据request获取
        ServletContext application2 = request.getServletContext();
        // 根据session获取
        HttpSession session = request.getSession();
        ServletContext application3 = session.getServletContext();
        System.out.println(application);
        System.out.println(application2);
        System.out.println(application3);

        // 应用场景
        // 1.获取服务器所在位置
        // application.getRealPath(path):获取服务器地址
        // 当参数path为空字符串时,表示服务器根目录
        // 当path传递了指定的值后,参数表示相对于服务器根目录的地址
        // 返回值为完整地址,相当于服务器根目录+path
        String path = application.getRealPath("");
        System.out.println("服务器根目录:"+path);
        // 模拟文件上传的过程,需要找到服务器根目录,在对应根目录创建一个专门存放图片的目录
        // 每天上传的图片存放在一个以年月日命名的子目录中
        // 通过application可以找到服务器根目录
        path = application.getRealPath("/upload/"+new SimpleDateFormat("yyyyMMdd").format(new Date()));
        System.out.println("path:"+path);
        File file = new File(path);
        file.mkdirs();

        // 2.获取全局初始化参数
        String encoding = application.getInitParameter("encoding");
        System.out.println("encoding:"+encoding);

        // 3.数据存储
        application.setAttribute("key","Hello application");
        application.getAttribute("key");
    }
}
